Paquetes empleados

# Cargamos los paquetes

library(tidyverse)
library(dplyr)
library(readr)
library(tidyr)
library(ggplot2)
library(ggthemes)
library(ggtext)
library(ggrepel)
library(ggforce)
library(patchwork)
library(sf)
library(mapSpain)
library(plotly)
library(jsonlite)
library(stringr)
load("OUTPUT/Enviroment_total.RData")


1. Introducción

En nuestro seminario analizaremos cómo factores tecnológicos impactan en la salud mental a nivel de España.

Pregunta 1: ¿Cuál es el perfil de la población más digitalizada en España y cuál es el perfil de la población con más problemas de salud mental?

Utilizaremos datos procesados con R, provenientes de la siguiente fuente oficial:

  • Encuesta sobre Equipamiento y Uso de Tecnologías (TIC) del INE.


2. Contexto de Salud Mental

Para entender la magnitud del problema, primero analizamos la distribución de la depresión según los siguientes factores.

Depresión por Situación Laboral y Sexo

Se representa en el eje x el porcentaje de cuadros depresivos, en el eje y la situación laboral y se dividen los resultados en hombres y mujeres.

En el siguiente gráfico vemos datos depresivos mayores en mujeres que en hombres.

Dato Crítico: El grupo de Desempleo presenta las tasas más altas de Cuadro Depresivo Mayor, superando significativamente al grupo que trabaja .


  # Código extraído de: Tabla_situacion_laboral.R y Grafico_situacion_laboral.R
  
  
  # Tabla
  datos_grafico_estudios <- mis_datos_salud_mental$depresion_actividad_economica %>%
  
  mutate(
  Porcentaje = parse_number(Total, locale = locale(decimal_mark = ","))
    ) %>%
  
  filter(
    Sexo != "Ambos sexos",
    Actividad.económica != "TOTAL",        
    Prevalencia.depresión %in% c("Cuadro depresivo mayor", "Otros cuadros depresivos")
  )

  
  # Gráfico
  
 g_actividad_apilado <- ggplot(datos_grafico_estudios,
                              aes(x = reorder(Actividad.económica, Porcentaje), 
                                  y = Porcentaje, 
                                  fill = Prevalencia.depresión)) +
  

  geom_bar(stat = "identity") + 
  
  geom_text(
    aes(label = paste0(round(Porcentaje, 1), "%")), 
    
    position = position_stack(vjust = 0.5),
    
    color = "black", 
    size = 2,        
    fontface = "bold"
  )+
  
  facet_wrap(~ Sexo) +
  

  coord_flip() + 
  
  labs(
    title = "Depresión por Situación Laboral y Sexo",
    x = "", # Dejamos vacío porque los nombres de actividad ya describen el eje
    y = "Porcentaje Total (%)",
    fill = "Diagnóstico"
  ) +
  
  scale_fill_brewer(palette = "Blues") +
  theme_minimal() +
  theme(
    legend.position = "bottom",
    plot.title = element_text(face = "bold")
  )

print(g_actividad_apilado)


Intensidad de la Depresión por nivel de estudios

Analizamos la gravedad de la depresión en función de los estudios.

  • Vemos de nuevo que la depresión afecta más al grupo de las mujeres que al grupo de los hombres.
  • También vemos como a mayor nivel de estudios, menor porcentaje de depresión.

Dato Crítico: Personas que tienen un nivel de estudios inferior, son las que más cuadros depresivos padecen.


# Código extraído de: Tabla_nivel_estudios.R y Grafico_nivel_estudios.R

tabla_nivel_estudios <- nivel_estudios_parseado %>%
  tidyr::separate(
    col = Nombre,
    into = c("Sexo", "Edad", "Nivel_de_estudios", "Prevalencia_depresion"), 
    sep = ", "
  ) %>% 
  rename(Porcentaje = Valor) %>%  
  select(-Secreto)

datos_grafico_estudios <- tabla_nivel_estudios %>%
  filter(
    Sexo != "Ambos sexos",
    Nivel_de_estudios != "Total",
    Edad == "TOTAL", 
    
    Prevalencia_depresion %in% c("Cuadro depresivo mayor", "Otros cuadros depresivos")
  ) %>% 
  mutate(Nivel_de_estudios= factor(
    Nivel_de_estudios, levels = c("TOTAL", "Básico e inferior", "Intermedio","Superior" )
    )
  )

grafico_nivel_estudios<- ggplot(datos_grafico_estudios,
                             aes(x = Nivel_de_estudios,
                                 y = Porcentaje, 
                                 fill = Prevalencia_depresion)) +
  geom_col() + 
  facet_wrap(~ Sexo) + 
  coord_flip() + 
  labs(
    title = "Depresión por Nivel de Estudios y Sexo",
    subtitle = "Cuadro depresivo mayor y Otros cuadros depresivos",
    x = "Nivel de Estudios",
    y = "Porcentaje Total de Prevalencia (%)",
    fill = "Prevalencia"
  ) +
  scale_fill_brewer(palette = "Blues") +
  theme_minimal()

print(grafico_nivel_estudios)


3. Uso de las TICS por comunidades autónomas.

Vamos a ver la distribución de las TIC sobre el territorio español.

Hemos unificado los datos de niños, adultos y mayores para crear un “Índice Digital”

Las zonas más oscuras es donde más uso de las TICs hay, las zonas menos claras tienen un menor uso de estas.


Instrucciones: Pase el ratón por encima de cada comunidad para ver el las etiquetas de cada comunidad de uso de internet por grupos de edad.

# Código extraído de: Mapa_España_TICS.R


mapa_españa_ccaa <- esp_get_ccaa(moveCAN = TRUE)

# Corrección para mapa
uso_tic_total_corregido_mapa <- uso_tic_total %>%
  mutate(
    Comunidad = case_when(
      Comunidad == "Asturias, Principado de"~"Asturias",
      Comunidad == "Balears, Illes" ~ "Baleares",
      Comunidad == "Castilla - La Mancha" ~ "Castilla-La Mancha",
      Comunidad == "Comunitat Valenciana" ~ "Comunidad Valenciana",
      Comunidad == "Madrid, Comunidad de" ~ "Madrid",
      Comunidad == "Murcia, Región de" ~ "Murcia",
      Comunidad == "Navarra, Comunidad Foral de" ~ "Navarra",
      Comunidad == "Rioja, La" ~ "La Rioja",
      TRUE ~ Comunidad
    )
  )

#Join para crear la tabla para representar el mapa

mapa_con_datos <- mapa_españa_ccaa %>%
  left_join(uso_tic_total_corregido_mapa, by = c("ccaa.shortname.es" = "Comunidad"))

#Creación del mapa

datos_mapa_coloreado <- mapa_con_datos %>%
  mutate(
    Uso_Global_Indice = (Frecuencia_Total_Adultos+ Frecuencia_Total_Niños+ Frecuencia_Total_Mayores)/3,
    
    
    tooltip_data = paste0(
      '<b>', ccaa.shortname.es, "</b><br>", 
      "--------------------------<br>",
      "Índice Global: ", round(Uso_Global_Indice, 1), "%<br>",
      "Adultos: ", round(Frecuencia_Total_Adultos, 1), "%<br>",
      "Niños: ", round(Frecuencia_Total_Niños, 1), "%<br>",
      "Mayores: ", round(Frecuencia_Total_Mayores, 1), "%"
    )
  )

mapa_intensidad <- ggplot(data = datos_mapa_coloreado) +
  geom_sf(
    aes(fill = Uso_Global_Indice, text = tooltip_data),
    color = "white", size = 0.2 
  ) +
  geom_sf_text(
    aes(label = ccaa.shortname.es), 
    size = 2,         
    color = "black",     
    fontface = "bold",
    check_overlap = TRUE 
  ) +

  scale_fill_gradient(
    low = "#EBF5FB",   
    high = "#21618C",  
    name = "Intensidad de Uso"
  ) +
  
  theme_void() +
  labs(title = "Intensidad del uso de TICs en España ") +
  theme(
    legend.position = "right",
    plot.title = element_text(hjust = 0.5, face = "bold")
  )

#Para hacer el mapa interactivo

mapa_final_españa <- ggplotly(mapa_intensidad, tooltip = "text") %>%
  style(hoveron = "fills", traces = 1) %>% 
  layout(
    hoverlabel = list(bgcolor = "white", bordercolor = "black", font = list(color = "black"))
  )

mapa_final_españa

El resultado se debe al factor de la edad media de cada comunidad autónoma, lo explicaremos en el siguiente gráfico.

Podemos observar que las zonas con mayor densidad de población presentan los índices de uso más altos.

Como conclusión de este mapa vemos que el uso de las TICs se concentra donde hay más gente y más joven.


4. Contexto de Uso de TICs

A continuación vamos a definir cual es el perfil de las personas que utilizan las TIC en España, observando en las distintas Comunidades Autónomas y clasificando por edad.

  1. Niños (10-15 años):

  2. Adultos (16-74 años):

  3. Mayores (75+ años):

# Código extraído de: Mapa_España_TICS.R 

# Corrección nombres
uso_tic_total_corregido <- uso_tic_total %>%
  mutate(
    Comunidad = case_when(
      Comunidad == "Asturias, Principado de"~"Asturias",
      Comunidad == "Balears, Illes" ~ "Baleares",
      Comunidad == "Castilla - La Mancha" ~ "Castilla-La Mancha",
      Comunidad == "Comunitat Valenciana" ~ "Comunidad Valenciana",
      Comunidad == "Madrid, Comunidad de" ~ "Madrid",
      Comunidad == "Murcia, Región de" ~ "Murcia",
      Comunidad == "Navarra, Comunidad Foral de" ~ "Navarra",
      Comunidad == "Rioja, La" ~ "La Rioja",
      TRUE ~ Comunidad
    )
  )

# Pivotaje
uso_tic_total_pivotada <- uso_tic_total_corregido %>% 
  pivot_longer(
    cols= -Comunidad,
    names_to = "Grupo_Edad",
    values_to = "Frecuencia_Total"
  )

orden_grupos <- c("Frecuencia_Total_Niños", "Frecuencia_Total_Adultos", "Frecuencia_Total_Mayores")
names_grupos <- c("Niños (10-15)", "Adultos (16-74)", "Mayores (75+)")

uso_tic_ordenada <- uso_tic_total_pivotada %>% 
  mutate(Grupo_Edad = factor(Grupo_Edad, levels = orden_grupos, labels = names_grupos))

# Gráfico
ggplot(uso_tic_ordenada, aes(x=Comunidad, y=Frecuencia_Total, fill=Grupo_Edad))+
  geom_bar(stat = "identity", position = "dodge")+
  labs(
    title= "Perfil de Uso Frecuente de las TIC por Edad y Comunidad",
    y= "Porcentaje de Uso Promedio (%)",
    x= "",
    fill = "Grupo de Edad")+
  scale_fill_brewer(palette = "Blues") +
  theme_classic()+
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1, size=10),
    legend.position = "top"
  )

5. Relación TICs con Depresión por Nivel de Estudios

Analizamos si la educación actúa como factor protector. El siguiente gráfico de doble eje muestra un cruce revelador:

  • Línea Azul (TICs): A mayor nivel educativo, mayor uso de tecnología.

  • Línea Roja (Depresión): A mayor nivel educativo, la depresión cae drásticamente.

# Código extraído de: Grafico_nivel_estudios.R

# AJUSTE: fig.height=6 y l-body-outset para que las líneas se vean claras.

if(exists("tabla_nivel_estudios_final")){
  
  max_tics <- max(tabla_nivel_estudios_final$Porcentaje_TICS, na.rm = TRUE)
  max_depresion <- max(tabla_nivel_estudios_final$Porcentaje_Depresion, na.rm = TRUE)
  factor_escala <- max_tics / max_depresion

  ggplot(tabla_nivel_estudios_final, 
         aes(x = as.numeric(factor(Nivel_de_estudios, 
                                   levels = c("Básico e inferior", "Intermedio", "Superior"))), 
             group = 1)) +
    
    geom_line(aes(y = Porcentaje_TICS, color = "Uso de TICs"), linewidth = 1.2) +
    geom_point(aes(y = Porcentaje_TICS, color = "Uso de TICs"), size = 4) +
    geom_text(aes(y = Porcentaje_TICS, label = round(Porcentaje_TICS, 1)), vjust = -1.5, fontface="bold") +
    
    geom_line(aes(y = Porcentaje_Depresion * factor_escala, color = "Depresión"), linewidth = 1.2) +
    geom_point(aes(y = Porcentaje_Depresion * factor_escala, color = "Depresión"), size = 4) +
    geom_text(aes(y = Porcentaje_Depresion * factor_escala, label = round(Porcentaje_Depresion, 1)), vjust = 2, fontface="bold") +
    
    scale_y_continuous(
      name = "Uso de TICs (%)",
      sec.axis = sec_axis(~ . / factor_escala, name = "Depresión (%)")
    ) +
    
    scale_x_continuous(
      breaks = 1:3,
      labels = c("Básico e inferior", "Intermedio", "Superior"),
      name = "Nivel de Estudios"
    ) +
    
    scale_color_manual(values = c("Uso de TICs" = "#1f77b4", "Depresión" = "#d62728")) +
    
    labs(
      title = "Nivel de Estudios: Factor Protector",
      subtitle = "Relación inversa entre adopción tecnológica y depresión",
      color = ""
    ) +
    theme_classic() +
    theme(legend.position = "bottom")
}

6. Relación TICs con Empleabilidad

Finalmente, llegamos a la “Paradoja Digital”. A menudo se asume que la conexión digital mejora las oportunidades, pero los datos muestran una realidad más compleja.

Comparamos dos grupos con niveles similares de uso de internet, pero realidades opuestas:

  1. Estudiantes: Alta conectividad y baja depresión.

  2. Desempleados: Alta conectividad y Muy alta depresión.

df_contexto <- mis_datos_salud_mental$depresion_actividad_economica %>%
  rename(
    Actividad = `Actividad.económica`,
    Tipo_Depresion = `Prevalencia.depresión`,
    Porcentaje = Total
  ) %>%
  filter(
    Sexo == "Ambos sexos",
    Tipo_Depresion == "Cuadro depresivo mayor",
    Actividad != "TOTAL"
  ) %>%
  mutate(
    Tasa_Depresion = parse_number(Porcentaje, locale = locale(decimal_mark = ",")),
    Clave_Union = case_when(
      # Intentamos capturar variantes comunes por si acaso
      Actividad %in% c("Parado/a", "Parados", "En desempleo", "Desempleado") ~ "En desempleo",
      Actividad == "Jubilado/a o prejubilado/a" ~ "Jubilado/Pensionista",
      Actividad == "Labores del hogar" ~ "Labores del hogar",
      Actividad == "Incapacitado/a para trabajar" ~ "Incapacitado",
      TRUE ~ "Otros"
    )
  )
    
    # Lógica visual simple
df_contexto <- df_contexto %>%
  mutate(Color_Barra = ifelse(Tasa_Depresion == max(Tasa_Depresion, na.rm=TRUE), "#C0392B", "#95A5A6"))

# ==============================================================================
# 2. DATOS TIC (Uso de Internet)
# ==============================================================================

lista_frecuencias <- c(
  "Han usado Internet diariamente (al menos 5 días a la semana)",
  "Han utilizado internet varias veces al día"
)

df_tic_preparado <- mis_datos_tic$uso_internet_socioeconomico %>%
  
  # 1. Renombrar usando los nombres que genera make.names (sin tildes)
  rename(
    Grupo = Clase.de.población, 
    Características = Características.socioeconómicas, 
    Frecuencia = Frecuencia.de.uso, 
    Total_TIC = Total
  ) %>%
  
  # 2. Filtros (usando grepl para buscar "diariamente")
  filter(
    Grupo == "Total de personas (16 a 74 años)",
    Frecuencia %in% lista_frecuencias
    
  ) %>%
  
  mutate(
    # 3. Usamos parse_number otra vez
    Tasa_Internet = parse_number(Total_TIC, locale = locale(decimal_mark = ",")),
    
    # 4. Homologación con grepl (equivalente a str_detect)
    Clave_Union = case_when(
      Características == "Situación laboral: Activos ocupados" ~ "Trabajando",
      Características == "Situación laboral: Activos parados" ~ "En desempleo",
      Características == "Situación laboral: Inactivos: Estudiantes" ~ "Estudiando",
      Características == "Situación laboral: Inactivos: Pensionistas" ~ "Jubilado/Pensionista",
      Características == "Situación laboral: Inactivos: Labores del hogar" ~ "Labores del hogar",
      TRUE ~ "Otros"
    )
  ) %>%
  
  
  group_by(Clave_Union) %>%
  summarise(Tasa_Internet = mean(Tasa_Internet, na.rm = TRUE))

# ==============================================================================
# 3. UNIÓN FINAL
# ==============================================================================
df_final<- left_join(df_contexto, df_tic_preparado, by = "Clave_Union") %>%
  filter(!is.na(Tasa_Internet)) %>% 
  select(Clave_Union, Tasa_Depresion, Tasa_Internet, Color_Barra)

g1 <- ggplot(df_contexto, aes(x = reorder(Actividad, -Tasa_Depresion), y = Tasa_Depresion)) +
  # Barras con color condicional (Rojo para desempleo)
  geom_col(aes(fill = Color_Barra), width = 0.6, alpha = 0.9) + 
  
  # Etiquetas numéricas sobre las barras
  geom_text(aes(label = paste0(Tasa_Depresion, "%")), 
            vjust = -0.5, fontface = "bold", color = "#2C3E50", size = 3.5) +
  
  scale_fill_identity() +
  # Truco técnico: str_wrap parte los textos largos del eje X
  scale_x_discrete(labels = function(x) stringr::str_wrap(x, width = 10)) + 
  scale_y_continuous(limits = c(0, max(df_contexto$Tasa_Depresion) + 1.5)) +
  
  # Títulos con formato HTML (ggtext)
  labs(
    title = "<span style='font-size:14pt'>1. El Contexto</span>",
    subtitle = "El <span style='color:#C0392B'><b>Desempleo</b></span> es el factor crítico en la salud mental base.",
    x = "", y = ""
  ) +
  
  theme_fivethirtyeight() +
  theme(
    plot.title = element_markdown(face = "bold"),
    plot.subtitle = element_markdown(size = 10),
    axis.text.x = element_text(size = 8.5, face = "bold", lineheight = 0.9),
    axis.text.y = element_blank(),
    panel.grid.major = element_blank(),
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA)
  )

# ==============================================================================
# 5. VISUALIZACIÓN: GRÁFICO 2 (EL GIRO)
# ==============================================================================
g2 <- ggplot(df_final_narrativa, aes(x = Tasa_Internet, y = Tasa_Depresion)) +
  # Línea de tendencia
  geom_smooth(method = "lm", se = FALSE, color = "aquamarine1", linetype = "solid", size = 1) +
  
  # Puntos principales con borde blanco (estilo 'pop')
  geom_point(aes(fill = Clave_Union), size = 6, shape = 21, color = "white", stroke = 1.5) +
  
  # ggforce: Elipse para resaltar la paradoja (Estudiantes vs Parados)
  geom_mark_ellipse(aes(filter = Clave_Union %in% c("En desempleo", "Estudiando"),
                        label = Clave_Union,
                        description = "Perfiles opuestos"),
                    label.fontsize = 8, 
                    label.buffer = unit(5, "mm"),
                    con.cap = 0,
                    color = "grey50") +
  
  # ggrepel: Etiquetas para el resto de puntos sin solapamiento
  geom_text_repel(aes(label = Clave_Union), 
                  data = subset(df_final_narrativa, !Clave_Union %in% c("En desempleo", "Estudiando")),
                  size = 3.5, color = "grey40", point.padding = 0.5) +
  
  scale_fill_tableau() +
  labs(
    title = "<span style='font-size:14pt'>2. El Giro (TICs)</span>",
    subtitle = "Alta tecnología no garantiza salud mental: comparar <b style='color:#F28E2B'>Estudiantes</b> vs <b style='color:#094B5B'>Parados</b>.",
    x = "Uso Diario de Internet (%)", 
    y = "Depresión Mayor (%)",
    caption = "Fuente: Elaboración propia con datos INE"
  ) +
  
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_markdown(face = "bold"),
    plot.subtitle = element_markdown(size = 10),
    legend.position = "none",
    axis.title = element_text(size = 9, face = "bold", color = "grey40"),
    panel.grid.minor = element_blank(),
    panel.grid.major = element_line(color = "grey95")
  )

# ==============================================================================
# 6. COMPOSICIÓN FINAL (PATCHWORK)
# ==============================================================================
#Ponemos un gráfico encima del otro con g1 / g2 porque sino se visualiza mal 
layout_final <- g1 / g2 + 
  plot_annotation(
    title = 'IMPACTO DEL TRABAJO Y LA BRECHA DIGITAL EN LA SALUD MENTAL',
    subtitle = 'Análisis cruzado de Encuesta Europea de Salud y Encuesta TIC',
    theme = theme(plot.title = element_text(size = 18, face = "bold", hjust = 0.5))
  )

# Mostrar resultado final
print(layout_final)